2018-9-12 Spring学习笔记

Spring有关Bean的配置中如果value中存在尖括号(<>)或者其他特殊字符你可以通过内部使用<value></value> 标签进行添加并进行转义([CDATA[]])

例如:

1
2
3
<bean>
<constructor-arg value="<Shanghai>" type="java.lang.String"></constructor-arg>
</bean>

你会发现bean加载的时候会报错
这时候可以利用<value></value>中添加<![CDATA[<>]]>的形式来写

所以如上例子可以写成

1
2
3
4
5
<bean id="car2>
<constructor-arg type="java.lang.String">
<value><![CDATA[<ShangHai>]]></value>
</constructor-arg>
</bean>

如果你需要再bean中能相互访问其他的bean你可以通过ref属性的形式或者写一匿名内部bean

  1. 使用ref属性
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <bean id="car2" class="com.example.spring.beans.Cars">
    <constructor-arg value="BMW" type="java.lang.String"></constructor-arg>
    <constructor-arg type="java.lang.String">
    <value><![CDATA[<ShangHai>]]></value>
    </constructor-arg>
    <constructor-arg type="int">
    <value>250</value>
    </constructor-arg>
    </bean>

    <bean id="person" class="com.example.spring.beans.Person">
    <property name="name" value="Tom" ></property>
    <property name="age" value="24"></property>
    <property name="car" ref="car2"><property>
    </bean>

或者也可以这么写

1
2
3
4
5
6
7
<bean id="person" class="com.example.spring.beans.Person">
<property name="name" value="Tom" ></property>
<property name="age" value="24"></property>
<property name="car">
<ref bean="car2" />
<property>
</bean>

  1. 使用匿名内部bean
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <bean id="person" class="com.example.spring.beans.Person">
    <property name="name" value="Tom" ></property>
    <property name="age" value="24"></property>
    <property name="car">
    <bean class="com.example.spring.beans.Car">
    <constructor-arg value="Ford"></constructor-arg>
    <constructor-arg value="ChangAn"></constructor-arg>
    <constructor-arg value="200000" type="double"></constructor-arg>
    </bean>
    </property>
    </bean>

==内部bean的id标记无效 #e91e63==

对于spring级联属性的例子

1
2
3
4
5
<bean>
<constructor-arg ref="car"></constructor-arg>
<prperty name="car.maxSpeed" value="250">
</property>
</bean>

可以看到直接可以在bean里面直接赋值了
注意如果在之前没有在赋值之前初始化属性是不可以赋值的

配置集合类型属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<bean id="com.example.spring.beans.Person".>
<property name="name" value="Mike"></property>
<property name="age" value="27"></property>
<property name="cars">
<list>
<ref bean="car" />
<ref bean="car2" />
<bean class="com.example.spring.beans.Car">
<constructor-arg value="Ford"></constructor-arg>
<constructor-arg value="ChangAn"></constructor-arg>
<constructor-arg value="200000" type="double"></constructor-arg>
<bean>
</list>
</property>
</bean>

配置Map属性

1
2
3
4
5
6
7
8
9
10
11
<bean id="NewPerson" class="com.example.spring.beans.NewPerson">
<property name="name" value="Rose"></property>
<property name="age" value="28"></property>
<!-- 接下来是一个使用map节点及map的entry子节点配置Map类型的成员变量 -->
<property name="cars">
<map>
<entry key="AA" value-ref="car"></entry>
<entry key="BB" value-ref="car2"></entry>
</map>
</property>
</bean>

配置properties属性值

1
2
3
4
5
6
7
<bean id="dataSource" class="com.example.spring.bean.DataSource">
<property name="properties">
<props>

</props>
</property>
</bean>